const dbUtil = require('../util/dbutil');

class SqlUpdate {
    /**
     *构造函数，用于创建 SqlUpdate 对象
     *@param {string} head - 查询头部
     *@param {object} body - 请求数据体
     */
    constructor(head, body) {
        //更新头
        this.head = head;
        //请求体
        this.body = body;
        //更新语句
        this.updateSql = '';
        //更新的参数
        this.updateArray = [];
        //自定义语句
        this.queryCriteria = '';
        return this;
    }

    /**
     *设置更新的参数
     *@param {array} keyArray - 所有字段数组
     *@param {object} body - 请求体
     *@return {SqlUpdate} 返回当前对象
     **/
    setSearchCriteria(keyArray) {
        // 清空之前的更新语句和参数
        this.updateSql = "";
        this.updateArray = [];


        // 遍历所有字段
        keyArray.forEach(key => {
            // 判断请求体中是否存在该字段
            if (this.body.hasOwnProperty(key)) {
                // 拼接更新语句
                this.updateSql += `${key} = ?,`;
                // 将参数添加到数组中
                this.updateArray.push(this.body[key]);
            }
        });
        // 去除最后的逗号
        this.updateSql = this.updateSql.slice(0, -1);
        return this;
    }

    /**
     *添加查询尾自定义命令
     *@param {string} val - 自定义命令
     *@return {SqlUpdate} 返回当前对象
     **/
    setQueryCriteria(val) {
        this.queryCriteria = ` ${val} `;
        return this;
    }

    //执行更新
    async execUpdate() {
        if(this.head[this.head.length - 1] !== ''){
            this.head += ' ';
        }
        return dbUtil.exec(this.head + this.updateSql + this.queryCriteria, this.updateArray);
    }
}


module.exports = SqlUpdate;